importScripts('./pyodide.js')

onmessage = async function(e) {
  try {
    const data = e.data;
    for (let key of Object.keys(data)) {
      if (key !== 'python') {
        // Keys other than python must be arguments for the python script.
        // Set them on self, so that `from js import key` works.
        self[key] = data[key];
      }
    }

    if (typeof self.__pyodideLoading === "undefined") {
      await loadPyodide({indexURL : '{{ PYODIDE_BASE_URL }}'});
    }
    await self.pyodide.loadPackagesFromImports(data.python);
    let result = await self.pyodide.runPythonAsync(data.python);
    self.postMessage({result});
  } catch (e) {
    // if you prefer messages with the error
    self.postMessage({error : e.message + '\n' + e.stack});
    // if you prefer onerror events
    // setTimeout(() => { throw err; });
  }
}
